// export const el = document.createElement('main')


// const handleClick = () => {
// 	console.log('被点击了1111')
// }
// el.addEventListener('click', handleClick)

// el.addEventListener('click', () => {
// 	console.log('被点击了2222')
// })


// el.click()

// console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')

// el.removeEventListener('click', handleClick)

// el.click()
// el.click()
// el.click()
// el.click()
interface EventMap {
	[propsName: string]: ((...args: any[]) => void)[]
}

export class Events {
	eventMap: EventMap = {}
	// 绑定
	addEventListener(type: string, callback: (...args: any[]) => void) {
		// 1. 查询自定义事件是否存在
		if (this.eventMap[type]) {
			this.eventMap[type].push(callback)
		} else {
			this.eventMap[type] = [callback]
		}

	}
	// 触发
	dispatchEventListener(type: string) {
		if (this.eventMap[type]) {
			this.eventMap[type].forEach(callback => {
				callback()
			})
		} else {
			console.warn('自定义事件不存在' + type)
		}
	}
	// 解除
	removeEventListener(type: string, callback?: (...args: any[]) => void) {
		if(typeof callback === 'undefined') {
			// 没有传递第二个参数， 解除所有事件驱动函数
			delete this.eventMap[type]
		} else {	
			// 解除指定事件驱动函数
			this.eventMap[type] = this.eventMap[type].filter(v => v !== callback)
		}
	}
	// 绑定事件： 只会触发一次
	// v-once
	once() {

	}
}

const bus = new Events()
console.log(bus)

const handleHaha = () => {
	console.log('haha 自定义事件执行了！！！！1111111111')
}

bus.addEventListener('haha', handleHaha)

bus.addEventListener('haha', () => {
	console.log('haha 自定义事件执行了！！！！22222222222')
})

bus.addEventListener('haha', () => {
	console.log('hah 自定义事件执行了！！！！33333333')
})


bus.addEventListener('click', () => {
	console.log('click 自定义事件执行了！！！！22222222222')
})


bus.dispatchEventListener('haha')
bus.dispatchEventListener('click')

bus.removeEventListener('haha', handleHaha)
console.log('解除 handleHaha 事件驱动函数')

bus.dispatchEventListener('haha')
bus.dispatchEventListener('click')
